package com.binc.testspring.util;

import com.binc.testspring.service.IPayService;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * 这个类是：获取所有IPayService的所有实现类的工具类
 *      仅限于获取IPayService的实现类，如果想获取更多的话，这里有些动西旧的i重写了；以后再说
 */
@Component //
public class PayWayUtils implements ApplicationContextAware {

    /**
     * 用于保存接口实现类名及对应的类
     */
    private Map<String, IPayService> map;

    /**
     * 获取应用上下文并获取相应的接口实现类
     * @param applicationContext
     * @throws BeansException
     */
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        //根据接口类型返回相应的所有bean
        map = applicationContext.getBeansOfType(IPayService.class);  //关键点  getBeansOfType
    }

    /**
     * 获取所有实现集合
     * @return
     */
    public Map<String, IPayService> getMap() {
        return map;
    }

    /**
     * 获取对应服务
     * @param key
     * @return
     */
    public IPayService getService(String key) {
        return map.get(key);
    }

}
